home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 406_01 / disked25 / source / screen.c < prev    next >
C/C++ Source or Header  |  1994-01-13  |  3KB  |  210 lines

  1. /* DISPLAY.C  Generic Screen Library Functions */
  2.  
  3. /* Copyright (c) Gregg Jennings 1989-1994
  4.  
  5.    Version 1.1 13-Jan-1994    Borland
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <ctype.h>
  10. #include <conio.h>
  11. #include <string.h>
  12. #include <dos.h>
  13.  
  14. #include "mylib.h"
  15.  
  16. void put(register unsigned int i,int c)
  17. {
  18.    for (; i > 0; i--)
  19.       conout(c);
  20. }
  21.  
  22. void print(const char *s)
  23. {
  24.    while (*s)
  25.       send(*s++);
  26. }
  27.  
  28. void printc(const char *s)
  29. {
  30.    put((80-strlen(s))/2,' ');
  31.    print(s);
  32.    send('\n');
  33. }
  34.  
  35. void bprint(const char *s)
  36. {
  37. byte r,c;
  38.  
  39.    getcursor(&r,&c);
  40.    print(s);
  41.    setcursor(r,c);
  42. }
  43.  
  44. void cursor(int m)
  45. {
  46. static byte a,b;
  47.  
  48.    if (m)
  49.       getcursor(&a,&b);
  50.    else
  51.       setcursor(a,b);
  52. }
  53.  
  54. /*
  55.    In-line asm - MSC and Borland formats.
  56.  
  57.    intdos() type REGS stuff can be used but they are very bulky.
  58. */
  59.  
  60. #ifdef _MSC_VER
  61. #pragma optimize("gle",off)
  62. #endif
  63.  
  64. void charout(int c)
  65. {
  66.    _asm mov ax,c
  67.    _asm mov ah,10
  68.    _asm xor bx,bx
  69.    _asm mov cx,1
  70.    _asm int 10h
  71. }
  72.  
  73. void conout(int _c)
  74. {
  75.    _asm mov   ax,_c
  76.    _asm mov   ah,0Eh
  77.    _asm mov   bx,0
  78.    _asm int   10h
  79. }
  80.  
  81. void conouta(int _c, int _a)
  82. {
  83.    _asm mov   ax,_c
  84.    _asm mov   ah,09h
  85.    _asm mov   bx,_a
  86.    _asm mov   bh,0
  87.    _asm mov   cx,1
  88.    _asm int   10h
  89. }
  90.  
  91. int conin(void)
  92. {
  93.    _asm xor   ax,ax
  94.    _asm int   16h
  95. }
  96.  
  97. int conflag(void)
  98. {
  99.    _asm mov   ah,2
  100.    _asm int   16h
  101. }
  102.  
  103. int input(void)
  104. {
  105.    _asm mov   ah,7
  106.    _asm int   21h
  107.    _asm xor   ah,ah
  108. }
  109.  
  110. #define TABSTOP 8
  111.  
  112. int send(int c)
  113. {
  114. register int i;
  115. register int r;
  116.  
  117.    r=0;
  118.    if (c=='\n')
  119.        conout('\r');
  120.    if (c=='\t')         /* Check for tab and to simulate or not */
  121.    {
  122.       char _t;
  123.       _asm    mov   ah,3
  124.       _asm    mov   bh,0
  125.       _asm    int   10h
  126.       _asm    mov   _t,dl
  127.       for (i=0;i<(TABSTOP-(_t%TABSTOP));i++)
  128.          conout(' ');
  129.    }
  130.    else
  131.    {
  132.       conout(c);
  133.       ++r;
  134.    }
  135.    return(r);
  136. }
  137.  
  138. void cursoron(void)
  139. {
  140.    _asm mov   al,1
  141.    _asm mov   ch,11
  142.    _asm mov   cl,12
  143.    _asm int   10h
  144. }
  145.  
  146. void cursoroff(void)
  147. {
  148.    _asm mov   al,1
  149.    _asm mov   ch,20
  150.    _asm mov   cl,0
  151.    _asm int   10h
  152. }
  153.  
  154. #ifndef __BORLANDC__
  155.  
  156. void clreol(void)
  157. {
  158.    _asm mov   ah,0Ah
  159.    _asm mov   al,' '
  160.    _asm xor   bh,bh
  161.    _asm mov   cx,79
  162.    _asm int   10h
  163. }
  164.  
  165. #endif
  166.  
  167. void getcursor(byte *r, byte *c)
  168. {
  169. byte a,b;
  170.  
  171.    _asm mov   ah,3
  172.    _asm xor   bh,bh
  173.    _asm int   10h
  174.    _asm mov   a,dh
  175.    _asm mov   b,dl
  176.    *r=a;
  177.    *c=b;
  178. }
  179.  
  180. void setcursor(byte r, byte c)
  181. {
  182.    _asm mov   ah,2
  183.    _asm xor   bh,bh
  184.    _asm mov   dh,r
  185.    _asm mov   dl,c
  186.    _asm int   10h
  187. }
  188.  
  189. void curright(void)
  190. {
  191.    _asm mov   ah,3
  192.    _asm xor   bh,bh
  193.    _asm int   10h
  194.    _asm inc   dl
  195.    _asm mov   ah,2
  196.    _asm xor   bh,bh
  197.    _asm int   10h
  198. }
  199.  
  200. void curleft(void)
  201. {
  202.    _asm mov   ah,3
  203.    _asm xor   bh,bh
  204.    _asm int   10h
  205.    _asm dec   dl
  206.    _asm mov   ah,2
  207.    _asm xor   bh,bh
  208.    _asm int   10h
  209. }
  210.